package com.settlement.system.common.enums;

import com.settlement.system.common.util.common.StringMathUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 统一账单-账单类型 枚举类
 * @author author
 */
public enum BillTypeEnum {
    /**
     * 京东账单明细
     */
    JD_ZD_MX("京东账单明细","1"),
    /**
     * 京东钱包流水
     */
    JD_QB_LS("京东钱包流水","2"),
    /**
     * 优购网（微信）账单明细
     */
    YG_WX("优购网（微信）账单明细","3"),
    /**
     * 优购网（支付宝）账单明细
     */
    YG_ZFB("优购网（支付宝）账单明细","4"),
    /**
     * 发货明细_尾款
     */
    FH_MX_WK("发货明细_尾款","5"),
    /**
     * 发货明细_首款
     */
    FH_MX_SK("发货明细_首款","6"),
    /**
     * 售后明细
     */
    SH_MX("售后明细","7"),
    /**
     * 在途售后明细
     */
    ZT_SH_MX("在途售后明细","8"),
    /**
     * 天猫账单明细
     */
    TM_ZD_MX("天猫账单明细","9"),
    /**
     * 往期售后明细_尾款
     */
    WQ_SH_MX_WK("往期售后明细_尾款","10"),
    /**
     * 往期售后明细_首款
     */
    WQ_SH_MX_SK("往期售后明细_首款","11"),
    /**
     * 微信小程序账单明细
     */
    WX_XCX_ZD_MX("微信小程序账单明细","12"),
    /**
     * 线下打款明细
     */
    XXDK_MX("线下打款明细","13"),
    /**
     * 营销费用
     */
    YXFY("营销费用","14"),
    /**
     * 蘑菇街余额明细
     */
    MGJ_YE_MX("蘑菇街余额明细","15"),
    /**
     * 蘑菇街小程序账单明细
     */
    MGJ_XCX_ZD_MX("蘑菇街小程序账单明细","16"),
    /**
     * 补款明细
     */
    BK_MX("补款明细","17"),
    /**
     * 订单赔付明细
     */
    DDPF_MX("订单赔付明细","18"),
    /**
     * 违规明细
     */
    WG_MX("违规明细","19"),
    /**
     * 退换运费无忧
     */
    THYFWY("退换运费无忧","20"),
    /**
     * 银联安卓账单明细
     */
    YL_AZ_ZD_MX("银联安卓账单明细","21"),
    /**
     * 银联苹果账单明细
     */
    YL_PG_ZD_MX("银联苹果账单明细","22");


    private String name;

    private String no;

    BillTypeEnum(String name, String no) {
        this.name = name;
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public String getNo() {
        return no;
    }


    /**
     * 根据名称获取编码
     * @param name
     * @return
     */
    public static String getNoByName(String name) {
        BillTypeEnum[] enums = BillTypeEnum.values();
        for (int index = 0; index < enums.length; index++) {
            if(enums[index].getName().equals(name)){
                return enums[index].getNo();
            }
        }
        return null;
    }

    /**
     * 根据名称获取编码
     * @param no
     * @return
     */
    public static String getNameByNo(String no) {
        BillTypeEnum[] enums = BillTypeEnum.values();
        for (int index = 0; index < enums.length; index++) {
            if(enums[index].getNo().equals(no)){
                return enums[index].getName();
            }
        }
        return null;
    }

    /**
     * 转换账单类型字段，如果不是空的或者数字。
     * 实体：
     * 统一账单明细
     *
     * @param name
     * @return
     */
    public static String convertToNo(String name) {
        if(StringUtils.isEmpty(name) || StringMathUtils.isNumeric(name)) {
            return name;
        }else{
            String noByName = BillTypeEnum.getNoByName(name);
            if(StringUtils.isEmpty(noByName)){
                //throw new Exception("账单类型无法识别");
                return name;
            }else{
                return noByName;
            }
        }
    }

    public static String convertToName(String no) {
        if(StringUtils.isEmpty(no) || !StringMathUtils.isNumeric(no)) {
            return no;
        }else{
            String nameByNo = BillTypeEnum.getNameByNo(no);
            if(StringUtils.isEmpty(nameByNo)){
                //throw new Exception("账单类型无法识别");
                return no;
            }else{
                return nameByNo;
            }
        }

    }

    public static List<Map<String, String>> getMapList(){
        return getMapList(null);
    }

    public static List<Map<String, String>> getMapList(String filter){
        List<Map<String,String>> list = new ArrayList<>();
        BillTypeEnum[] enums = BillTypeEnum.values();
        for (int index = 0; index < enums.length; index++) {
            Map<String,String> map = new HashMap<>(16);
            if(StringUtils.isNotEmpty(filter)){
                if(enums[index].getName().toUpperCase().contains(filter.toUpperCase())
                        ||enums[index].getNo().toUpperCase().contains(filter.toUpperCase())){
                    map.put(enums[index].getName(),enums[index].getNo());
                }
            }else{
                map.put(enums[index].getName(),enums[index].getNo());
            }
            list.add(map);
        }
        return list;
    }

    public static void main(String[] args) {
        BillTypeEnum[] values = BillTypeEnum.values();
        System.out.println("case");
        for (int index = 0; index < values.length; index++) {
            BillTypeEnum value = values[index];
            System.out.println("when bill_type = '"+value.getName()+"' then '"+ value.getNo() +"' ");
            if(index==values.length-1){
                System.out.println(" else '' end ");
            }
        }
        //if ("NM" == row.status) return "未匹配";
        for (int index = 0; index < values.length; index++) {
            BillTypeEnum value = values[index];
            System.out.println("if('"+value.getNo()+"'== row.billType) return '"+value.getName()+"';");

        }
        //System.out.println(getMapList());
    }
}
